
// A Scalar that asserts for uninitialized access.
template<typename T>
class SafeScalar
{
  public:
	SafeScalar()
		: initialized_(false)
	{
	}
	SafeScalar(const SafeScalar& other) { *this = other; }
	SafeScalar& operator=(const SafeScalar& other)
	{
		val_ = T(other);
		initialized_ = true;
		return *this;
	}

	SafeScalar(T val)
		: val_(val)
		, initialized_(true)
	{
	}
	SafeScalar& operator=(T val)
	{
		val_ = val;
		initialized_ = true;
	}

	operator T() const
	{
		VERIFY(initialized_ && "Uninitialized access.");
		return val_;
	}

  private:
	T val_;
	bool initialized_;
};
